package com.alibaba.springbootrbac.model.enum1;

import lombok.Getter;

@Getter
public enum PermissionEnum {

    // -------------------- 用户管理 --------------------
    USER_CREATE("USER_CREATE", "USER_MANAGEMENT", "用户管理", "新增用户"),
    USER_UPDATE("USER_UPDATE", "USER_MANAGEMENT", "用户管理", "更新用户"),
    USER_DELETE("USER_DELETE", "USER_MANAGEMENT", "用户管理", "删除用户"),
    USER_ASSIGN_ROLE("USER_ASSIGN_ROLE", "USER_MANAGEMENT", "用户管理", "给用户分配角色"),
    USER_REMOVE_ROLE("USER_REMOVE_ROLE", "USER_MANAGEMENT", "用户管理", "移除用户的角色"),

    // -------------------- 角色管理 --------------------
    ROLE_CREATE("ROLE_CREATE", "ROLE_MANAGEMENT", "角色管理", "新增角色"),
    ROLE_UPDATE("ROLE_UPDATE", "ROLE_MANAGEMENT", "角色管理", "更新角色"),
    ROLE_DELETE("ROLE_DELETE", "ROLE_MANAGEMENT", "角色管理", "删除角色"),
    ROLE_GET_ONE("ROLE_GET_ONE", "ROLE_MANAGEMENT", "角色管理", "查询单个角色"),
    ROLE_GET_ALL("ROLE_GET_ALL", "ROLE_MANAGEMENT", "角色管理", "查询所有角色"),

    // -------------------- 角色权限管理 --------------------
    ROLE_ASSIGN_PERMISSION("ROLE_ASSIGN_PERMISSION", "ROLE_PERMISSION_MANAGEMENT", "角色权限管理", "给角色分配权限"),
    ROLE_REMOVE_PERMISSION("ROLE_REMOVE_PERMISSION", "ROLE_PERMISSION_MANAGEMENT", "角色权限管理", "移除角色的权限"),

    // -------------------- 权限管理 --------------------
    PERMISSION_CREATE("PERMISSION_CREATE", "PERMISSION_MANAGEMENT", "权限管理", "新增权限"),
    PERMISSION_UPDATE("PERMISSION_UPDATE", "PERMISSION_MANAGEMENT", "权限管理", "更新权限"),
    PERMISSION_DELETE("PERMISSION_DELETE", "PERMISSION_MANAGEMENT", "权限管理", "删除权限"),
    PERMISSION_GET_ONE("PERMISSION_GET_ONE", "PERMISSION_MANAGEMENT", "权限管理", "查询单个权限"),
    PERMISSION_GET_ALL("PERMISSION_GET_ALL", "PERMISSION_MANAGEMENT", "权限管理", "查询所有权限");

    private final String code;        // 权限编码
    private final String module;      // 模块英文编码
    private final String moduleDesc;  // 模块中文描述
    private final String description; // 功能描述

    PermissionEnum(String code, String module, String moduleDesc, String description) {
        this.code = code;
        this.module = module;
        this.moduleDesc = moduleDesc;
        this.description = description;
    }
}
